package cc.magicjson.synthesis.service;


import cc.magicjson.synthesis.model.Coupon;
import cc.magicjson.synthesis.context.DiscountContext;
import cc.magicjson.synthesis.model.Order;
import cc.magicjson.synthesis.model.User;

/**
 * 支付服务，负责处理订单支付相关业务
 */
public class PaymentService {
    private final DiscountService discountService;

    public PaymentService(DiscountService discountService) {
        this.discountService = discountService;
    }

    /**
     * 处理订单支付
     * @param order 要支付的订单
     * @return 支付结果
     */
    public boolean processPayment(Order order) {
        // 先计算折扣
        Order discountedOrder = discountService.calculateDiscount(order);

        // 调用实际支付接口（这里简化为假设支付成功）
        boolean paymentSuccess = callExternalPaymentApi(discountedOrder);

        if (paymentSuccess) {
            // 支付成功后，实际扣减用户资源
            consumeUserResources(discountedOrder);
            return true;
        }

        return false;
    }

    /**
     * 调用外部支付API
     * @param order 订单
     * @return 支付结果
     */
    private boolean callExternalPaymentApi(Order order) {
        // 实际项目中这里会调用第三方支付接口
        // 这里简化为直接返回成功
        System.out.println("调用支付接口，支付金额：" + order.getFinalAmount());
        return true;
    }

    /**
     * 扣减用户资源（积分和优惠券）
     * @param order 订单
     */
    private void consumeUserResources(Order order) {
        User user = order.getUser();
        DiscountContext context = new DiscountContext(order);

        // 获取使用的积分
        Integer pointsUsed = context.getAttribute("POINTS_USED");
        if (pointsUsed != null && pointsUsed > 0) {
            // 扣减用户积分
            user.setPoints(user.getPoints() - pointsUsed);
            System.out.println("扣减用户积分：" + pointsUsed);
        }

        // 获取使用的优惠券
        Coupon coupon = context.getAttribute("COUPON_USED");
        if (coupon != null) {
            // 标记优惠券为已使用
            coupon.setUsed(true);
            System.out.println("标记优惠券为已使用：" + coupon.getId());
        }
    }
}
